"use strict";
/**
 * ts 函数 ：可选参数
 * function 函数名(形参？:类型):返回值类型{}
 *
 */
function bunGun(name) {
    console.log(`购买了${name}的机枪`);
}
;
bunGun(); // 可以不传
bunGun('ak47'); //也可传
/**
 * ts 函数：默认值
 * 注意：带默认值的参数 本身也是可选参数
 * function 函数名(形参1:类型=默认值1,形参2:类型=默认值2):返回值类型{}
 *
 *
 * 调用
 * 1： 不传递实参       函数名()                ---->编译后 函数名(默认值1,默认值2)
 * 2： 传递1实参        函数名(实参1)           ---->编译后 函数名(实参1,默认值2)
 * 3： 传递2个实参      函数名(实参1,实参2)      ---->编译后 函数名(实参1,实参2)
 * 4： 只传递第二个实参  函数名(undefined,实参2) ---->编译后 函数名(默认值1,实参2)
 *
 */
function daBaoJian(girlName = "三上悠亚", count = 1) {
    console.log(`老板给我来个${girlName},做${count}次精油推背`);
}
daBaoJian(); //不传参数
daBaoJian("波多野结衣"); //传1个参数
daBaoJian("大桥未久", 10); //传2个参数
daBaoJian(undefined, 100); //只传第2个参数
/**
 * ts 函数：剩余参数
 *
 * function 函数名(形参1:类型,形参2:类型,...形参3:类型[]):返回值类型{
 *    console.log("剩余参数")
 * }
 *
 * 特点：
 * 剩余参数：只能 定义一个
 *          只能 定义为数组
 *          只能 定义在形参列表最后
 *
 */
//例子 不确定参数求和; 需要利用剩余参数
function add(x, y, ...restNum) {
    //1.创建1个求和变量，保存求和结果,将x和y求和的值存入
    let result = x + y;
    // 遍历剩余参数 累加在 result 上
    for (const item of restNum) {
        result += item;
    }
    //打印输出结果
    console.log(result);
}
add(1, 3, 4, 5);
